﻿using System;
using System.Linq;
using Business_Layer.Data_Access_Layer;
using System.Web.UI;

namespace Business_Layer.Business_Layer.Proyectos
{
    public class ControladorProyectos : Page
    {
        private readonly DB_SAPDataContext _dbSap = new DB_SAPDataContext();

        public string CrearContenidoProyectos()
        {
            var proyectos =
                _dbSap.INTEGRANTES_PROYECTOS.Where(
                    x => x.INTEGRANTES.INTEGRANTES_ID == Convert.ToInt32(Session["UserId"]))
                      .Select(x => x.PROYECTOS).ToList().Distinct();

            var renderProyectos = proyectos.Aggregate(string.Empty, (current, proyecto) =>
                                                                    current +
                                                                    ("<tr><td>" + proyecto.PROYECTOS_nombre +
                                                                     "</td><td>" +
                                                                     proyecto.PROYECTOS_fechaRegistro +
                                                                     "</td>" +
                                                                     "<td>" +
                                                                     "<span id='editarProyecto' class='clsEditarProyecto' data-id='" +
                                                                     proyecto.PROYECTOS_ID + "' data-nombre='" +
                                                                     proyecto.PROYECTOS_nombre +
                                                                     "'><img src='/Misc/imagenes/edit_icon_24.png' /></span>" +
                                                                     "<span id='eliminarProyecto' class='clsEliminarProyecto' data-id='" +
                                                                     proyecto.PROYECTOS_ID +
                                                                     "'><img src='/Misc/imagenes/cancel.png' /></span></td></tr>"));

            return
                "<table id='tblProyectos''>" +
                "<tr>" +
                "<th>Nombre</th><th>Fecha de Creación</th><th></th>" +
                "</tr>" +
                renderProyectos +
                "</table>";
        }

        public string RegistrarProyecto(PROYECTOS proyecto)
        {
            try
            {
                if (ValidarNombreProyecto(proyecto.PROYECTOS_nombre))
                    return "Nombre de proyecto ya existente, favor de especificar uno diferente";

                _dbSap.PROYECTOS.InsertOnSubmit(proyecto);
                _dbSap.SubmitChanges();

                return "Proyecto registrado";
            }
            catch
            {
                return "Proyecto no registrado";
            }
        }

        private bool ValidarNombreProyecto(string nombre)
        {
            return _dbSap.PROYECTOS.Any(x => x.PROYECTOS_nombre.Equals(nombre));
        }

        private bool ValidarNombreProyecto(string nombre, int id)
        {
            return _dbSap.PROYECTOS.Any(x => x.PROYECTOS_nombre.Equals(nombre) && x.PROYECTOS_ID != id);
        }

        public string ModificarProyecto(PROYECTOS proyecto)
        {
            try
            {
                if (ValidarNombreProyecto(proyecto.PROYECTOS_nombre, proyecto.PROYECTOS_ID))
                    return "Nombre de proyecto ya existente, favor de especificar uno diferente";

                var proyectoModificar = _dbSap.PROYECTOS.FirstOrDefault(x => x.PROYECTOS_ID == proyecto.PROYECTOS_ID);

                if (proyectoModificar != null)
                {
                    proyectoModificar.PROYECTOS_nombre = proyecto.PROYECTOS_nombre;

                    _dbSap.SubmitChanges();
                    return "Proyecto editado";
                }

                return "Proyecto no editado";
            }
            catch
            {
                return "Proyecto no editado";
            }
        }

        public string EliminarProyecto(int id)
        {
            try
            {
                var proyecto = _dbSap.PROYECTOS.Single(x => x.PROYECTOS_ID == id);

                _dbSap.PROYECTOS.DeleteOnSubmit(proyecto);
                _dbSap.SubmitChanges();

                return "Proyecto eliminado";
            }
            catch
            {
                return "Proyecto no eliminado";
            }
        }
    }
}